package pe.edu.sistemas.postgrado.samupg.repository.dao.implHib;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;
import pe.edu.sistemas.postgrado.samupg.domain.model.Periodo;
import pe.edu.sistemas.postgrado.samupg.repository.dao.PeriodoDAO;

/**
 *
 * @author Manolo
 */
@Repository
public class PeriodoDAOImpl implements PeriodoDAO {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public List<Periodo> listarPeriodos() throws DataAccessException {
        return sessionFactory.getCurrentSession().createCriteria(Periodo.class)
                .list();
    }

    @Override
    public void create(Periodo periodo) throws DataAccessException {
        sessionFactory.getCurrentSession().persist(periodo);
    }

    @Override
    public Periodo getPeriodosxId(Integer idPeriodo) throws DataAccessException {
        return (Periodo) sessionFactory.getCurrentSession().get(Periodo.class, idPeriodo);
    }

    @Override
    public Periodo getPeriodoActual() throws DataAccessException {
        //String s = "from Periodo where periodoActual = true";
        //return (Periodo) sessionFactory.getCurrentSession().createQuery(s).uniqueResult();
        
        return (Periodo) sessionFactory.getCurrentSession().createCriteria(Periodo.class)
                .add(Restrictions.eq("periodoActual", Boolean.TRUE)).uniqueResult();
    }

    @Override
    public void cambiarEstado(boolean estado, Integer periodoId) throws DataAccessException {
        String s = "update Periodo set periodoActual = :periodoActual"
                + " where periodoId = :periodoId";
        Query query = sessionFactory.getCurrentSession().createQuery(s);
        query.setParameter("periodoActual", estado);
        query.setParameter("periodoId", periodoId);
        query.executeUpdate();
    }

    @Override
    public List<Periodo> getPeriodoActualOrig() throws DataAccessException {


        String s = "from Periodo where periodoActual = true";
        Query query = sessionFactory.getCurrentSession().createQuery(s);
        List list = query.list();

        return list;

    }

    @Override
    public void actualizarPeriodo(Periodo periodo) throws DataAccessException {
        sessionFactory.getCurrentSession().merge(periodo);
    }
}
